<?php
require_once('system/project_settings.php');
Pressure::setStart('main'); // Начинаем сбор данных о нагрузке страницы
$strUrlWithSlashes = str_replace(array('%25', '%2F'),array('%', '/'), $_SERVER['REQUEST_URI']);
if ($_SERVER['REQUEST_URI'] != $strUrlWithSlashes && !preg_match('#/ajax/#', $strUrlWithSlashes)) {
	User_Session::moveTo($strUrlWithSlashes);
}

$getStrPos = strpos($_SERVER['REQUEST_URI'], '?');
$strUrl = substr($_SERVER['REQUEST_URI'], 0, $getStrPos ? $getStrPos : strlen($_SERVER['REQUEST_URI']));

$arrRequest = explode('/', substr($strUrl, strlen(W_ABSPATH))); // Преобразовываем URL к массиву
// Определяем поддомен
$subDomain = 'www';

if (isset($_SERVER['HTTP_HOST'])) {
	$arrDomainNames = explode('.', $_SERVER['HTTP_HOST']);
	$domainsCount = count($arrDomainNames);
	if ($domainsCount > 3) {
		$domain = 'http://' . $arrDomainNames[$domainsCount - 3] . '.';
		$domain .= $arrDomainNames[$domainsCount - 2] . '.' . $arrDomainNames[$domainsCount - 1] . '/';
		User_Session::moveTo($domain . substr($_SERVER['REQUEST_URI'], 1));
	}
	$subDomain = substr($_SERVER['HTTP_HOST'], 0, strpos($_SERVER['HTTP_HOST'], '.'));
}

$apiVersion = 1;
// Делаем проверку на АПИ: иная авторизация, а также права
if ($subDomain == 'api' || $arrRequest[0] == 'api') {
	define('IS_API_REQUEST', true);
}

User_Auth::everyPageAuthorizationActions();

// Делаем преобразования по языкам
$currentLanguage = 'rus';
if ($arrRequest[0] == 'rus' || $arrRequest[0] == 'eng') {
	$currentLanguage = $arrRequest[0];
	Service_Translate::setLang($currentLanguage);
	$arrRequest = array_slice($arrRequest, 1);
}

for ($i = 0; $i <= 5; $i++) {
	if (!isset($arrRequest[$i])) $arrRequest[$i] = ''; // Для упрощения обработки контроллером
}

//User_Session::registerReferer($arrRequest); // Сохраняем поисковые запросы если есть

// Показываем 503 если надо
/**if ($arrRequest[0] != 'parse') {
	$objController = new Controller_Default($arrRequest);
	$objController->setError(503);
	$objController->showError();
}*/

//Service_Exchange::setCurrencyForPage(); // Устанавливаем валюту



define('API_VERSION', $apiVersion);

if (!defined('MAIL_CLASS_DEFINED')) {
	if (isset($_SERVER['HTTP_HOST'])) {
		// Делаем редирект если такого поддомена не должно быть 
		$arrSubDomains = array(
			'www' => 1,
			'extranet' => 1,
			'm' => 1,
			'api' => 1,
			'ajax' => 1,
			'topclient' => 1,
		); 
		if (!isset($arrSubDomains[$subDomain])&& ($arrRequest[0] != 'ajax' || $arrRequest[1] != 'hotel' || $arrRequest[2] != 'check_available')) {
			User_Session::moveTo(W_FULLPATH . substr($_SERVER['REQUEST_URI'], 1));
		}
	}
}

$version = empty($version) ? 'main' : $version;
define('SITE_VERSION', $version);
// Определение контроллера для обработки запроса
global $controller;

switch ($arrRequest[0]) {
	case '': case 'index.html': // Главная страница
		$controller = new Controller_Index($arrRequest);
		break;
	case 'building': // Здания
		$controller = new Controller_Building($arrRequest);
		break;
	case 'send_troops': // Здания
		$controller = new Controller_TroopsEvents($arrRequest);
		break;
	case 'send_traders': // Здания
		$controller = new Controller_TradersEvents($arrRequest);
		break;
	case 'ajax': // обработка AJAX - запросов
	  switch ($arrRequest[1]) {
	  	case 'common': // AJAX - обработка общих действий
		    $controller = new Controller_Ajax_Common($arrRequest);
		    break;
			case 'auth': // AUTH - обработка общих действий
		    $controller = new Controller_Ajax_Auth($arrRequest);
		    break;
	  }
	default:
	  echo 'No controller';
	  exit();
	  break;
}
//$controller->version = empty($version) ? 'main' : $version;
if ($currentLanguage) $controller->setLanguage($currentLanguage);
if ($controller->error) $controller->showError(); // Проверка не возникли ли ошибки при создании объекта
else {
	try {
		$controller->action();
	}
	catch (Exception_Error $e) {
		$controller->setTitle(Service_Translate::getText('Ошибка'));
		$objViewBlock = new View_Block();
		$controller->showHeader();
			$objViewBlock->showError($e);
		$controller->showFooter();
	}
	catch (Exception_SiteError $e) {
		$errors = array(404, 403, 503);
		if (in_array($e->getCode(), $errors)) {
			$controller->setError($e->getCode());
			$controller->showError($e->getMessage());
		}
	}
}

Pressure::saveDuration($_SERVER['REQUEST_URI'], 'main');

// Если посещение админа - сохраняем отельную запись
//if (SimpleAdministration::isAdmin()) Pressure::saveSupportAdminDuration();

// Выводим отладочную инфу
//if ((isset($_GET['debug']) || isset($_GET['stmt'])) && SimpleAdministration::isAdmin()) {
	//echo Service_Debug::makeFullDebugInfo2();
//}
?>